package com.ruoyi.system.service.impl;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import java.util.stream.Collectors;

import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.system.domain.Kline;
import com.ruoyi.system.domain.vo.KlineDataVo;
import com.ruoyi.system.mapper.KlineMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.system.mapper.CsvDataMapper;
import com.ruoyi.system.domain.CsvData;
import com.ruoyi.system.service.ICsvDataService;

/**
 * k线图数据Service业务层处理
 * 
 * @author ruoyi
 * @date 2024-03-19
 */
@Service
public class CsvDataServiceImpl implements ICsvDataService 
{
    @Autowired
    private CsvDataMapper csvDataMapper;
    @Autowired
    private KlineMapper klineMapper;

    /**
     * 查询k线图数据
     * 
     * @param id k线图数据主键
     * @return k线图数据
     */
    @Override
    public CsvData selectCsvDataById(Long id)
    {
        return csvDataMapper.selectCsvDataById(id);
    }

    /**
     * 查询k线图数据列表
     * 
     * @param csvData k线图数据
     * @return k线图数据
     */
    @Override
    public List<CsvData> selectCsvDataList(CsvData csvData)
    {
        return csvDataMapper.selectCsvDataList(csvData);
    }

    /**
     * 新增k线图数据
     * 
     * @param csvData k线图数据
     * @return 结果
     */
    @Override
    public int insertCsvData(CsvData csvData)
    {
        csvData.setCreateTime(DateUtils.getNowDate());
        return csvDataMapper.insertCsvData(csvData);
    }

    /**
     * 修改k线图数据
     * 
     * @param csvData k线图数据
     * @return 结果
     */
    @Override
    public int updateCsvData(CsvData csvData)
    {
        csvData.setUpdateTime(DateUtils.getNowDate());
        return csvDataMapper.updateCsvData(csvData);
    }

    /**
     * 批量删除k线图数据
     * 
     * @param ids 需要删除的k线图数据主键
     * @return 结果
     */
    @Override
    public int deleteCsvDataByIds(Long[] ids)
    {
        return csvDataMapper.deleteCsvDataByIds(ids);
    }

    /**
     * 删除k线图数据信息
     * 
     * @param id k线图数据主键
     * @return 结果
     */
    @Override
    public int deleteCsvDataById(Long id)
    {
        return csvDataMapper.deleteCsvDataById(id);
    }

    @Override
    public KlineDataVo getKlineInfo(Long id) {
        //获取k线图信息
        Kline kline = klineMapper.selectKlineById(id);

        //获取数据
        CsvData query = new CsvData();
        query.setKlineId(id);
        List<CsvData> csvData = csvDataMapper.selectCsvDataList(query);
        //封装返回
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        KlineDataVo klineDataVo = new KlineDataVo();
        BeanUtils.copyProperties(kline, klineDataVo);

        List<List<String>> dataList=new LinkedList<>();
        for (CsvData csvDatum : csvData) {
            List<String> rows=new LinkedList<>();
            rows.add(sdf.format(csvDatum.getTimeStamp()));
            rows.add(String.valueOf(csvDatum.getStartPrice().doubleValue()));
            rows.add(String.valueOf(csvDatum.getEndPrice().doubleValue()));
            rows.add(String.valueOf(csvDatum.getMinPrice().doubleValue()));
            rows.add(String.valueOf(csvDatum.getMaxPrice().doubleValue()));
            rows.add(String.valueOf(csvDatum.getTurnover()));
            dataList.add(rows);
        }
        klineDataVo.setkLineDataList(dataList);
        List<String> dateList = csvData.stream().map(e -> {
            Date timeStamp = e.getTimeStamp();
            // 创建SimpleDateFormat对象并指定日期时间格式
            // 使用SimpleDateFormat将Date对象格式化为String
            String formattedDate = sdf.format(timeStamp);
            return formattedDate;
        }).collect(Collectors.toList());
        klineDataVo.setDateList(dateList);
        return klineDataVo;
    }
}
